﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Siser.Web.Models;
using System.Data.Objects;

namespace Siser.Web.Controllers
{ 
    public class UsuarioEquipoController : Controller
    {
        private SiserEntities db = new SiserEntities();

        //
        // GET: /UsuarioEquipo/

        public ViewResult Index()
        {
            var usuariosequipos = db.UsuariosEquipos.Include(u => u.Usuario).Include(u => u.Equipo);
            return View(usuariosequipos.ToList());
        }

        //
        // GET: /UsuarioEquipo/Details/5

        public ViewResult Details(int id)
        {
            UsuarioEquipo usuarioequipo = db.UsuariosEquipos.Find(id);
            return View(usuarioequipo);
        }

        //
        // GET: /UsuarioEquipo/Create

        public ActionResult Create()
        {

            var usuario = (from u in db.Usuarios
                           where u.Vigencia == true
                           select u).ToList();

            ViewBag.UsuarioId = new SelectList(usuario, "Id", "Nombre");

            List<Equipo> lEquipo = new List<Equipo>();
            Equipo e = new Equipo();
            e.Nombre = "Seleccione usuario... ";
            e.Id = 0;
            lEquipo.Add(e);

            MultiSelectList listaEquipos = new MultiSelectList(lEquipo, "Id", "Nombre");
            MultiSelectList listaEquipoAsignado = new MultiSelectList(lEquipo, "Id", "Nombre");

            ViewData["ListEquipos"] = listaEquipos;
            ViewData["ListequipoAsignado"] = listaEquipoAsignado;

            return View();
        }


        [HttpPost]
        public JsonResult listarEquiposSinAsociar(int idUsuario)
        {

            var equipo = from e1 in db.Equipos
                         where !(from ue in db.UsuariosEquipos
                                       where ue.UsuarioId == idUsuario
                                           select ue.EquipoId).Contains(e1.Id)
                             select e1;                     
            
            List<Equipo> le = new List<Equipo>();
            foreach (var eq in equipo)
            {
                Equipo e = new Equipo();
                e.Nombre = eq.Nombre;
                e.Id = eq.Id;
                le.Add(e);
            }

            return Json(new { Result = le });
        }

        [HttpPost]
        public JsonResult listarEquiposAsociados(int idUsuario)
        {

            var equiposPorUsuario = (
                                        from e in db.Equipos
                                        join ue in db.UsuariosEquipos on e.Id equals ue.EquipoId
                                        join u in db.Usuarios on ue.UsuarioId equals u.Id
                                        where u.Id == idUsuario
                                        select e
                                    );
            List<Equipo> le = new List<Equipo>();
            foreach (var eq in equiposPorUsuario)
            {
                Equipo e = new Equipo();
                e.Nombre = eq.Nombre;
                e.Id = eq.Id;
                le.Add(e);
            }

            return Json(new { Result = le });
        }

        //
        // POST: /UsuarioEquipo/Create

        [HttpPost]
        public ActionResult Create(UsuarioEquipo usuarioequipo)
        {
            if (ModelState.IsValid)
            {
                db.UsuariosEquipos.Add(usuarioequipo);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            ViewBag.UsuarioId = new SelectList(db.Usuarios, "Id", "Nombre", usuarioequipo.UsuarioId);
            ViewBag.EquipoId = new SelectList(db.Equipos, "Id", "Nombre", usuarioequipo.EquipoId);
            return View(usuarioequipo);
        }
        
        //
        // GET: /UsuarioEquipo/Edit/5
 
        public ActionResult Edit(int id)
        {
            UsuarioEquipo usuarioequipo = db.UsuariosEquipos.Find(id);
            ViewBag.UsuarioId = new SelectList(db.Usuarios, "Id", "Nombre", usuarioequipo.UsuarioId);
            ViewBag.EquipoId = new SelectList(db.Equipos, "Id", "Nombre", usuarioequipo.EquipoId);
            return View(usuarioequipo);
        }

        //
        // POST: /UsuarioEquipo/Edit/5

        [HttpPost]
        public ActionResult Edit(UsuarioEquipo usuarioequipo)
        {
            if (ModelState.IsValid)
            {
                db.Entry(usuarioequipo).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.UsuarioId = new SelectList(db.Usuarios, "Id", "Nombre", usuarioequipo.UsuarioId);
            ViewBag.EquipoId = new SelectList(db.Equipos, "Id", "Nombre", usuarioequipo.EquipoId);
            return View(usuarioequipo);
        }

        //
        // GET: /UsuarioEquipo/Delete/5
 
        public ActionResult Delete(int id)
        {
            UsuarioEquipo usuarioequipo = db.UsuariosEquipos.Find(id);
            return View(usuarioequipo);
        }

        public void saveUsuarioEquipo(int idEquipo, int usuarioId)
        {
            UsuarioEquipo ue = new UsuarioEquipo();
            ue.UsuarioId = usuarioId;
            ue.EquipoId = idEquipo;
            db.UsuariosEquipos.Add(ue);
            db.SaveChanges();
        }

        public void deleteUsuarioEquipo(int idEquipo, int usuarioId)
        {
            var usuarioEquipo = (from ue in db.UsuariosEquipos
                                where ue.UsuarioId == usuarioId && ue.EquipoId == idEquipo
                                select ue).ToList();

            foreach (var ue in usuarioEquipo)
            {
                db.UsuariosEquipos.Remove(ue);
                db.SaveChanges();
            }
        }

        //
        // POST: /UsuarioEquipo/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {            
            UsuarioEquipo usuarioequipo = db.UsuariosEquipos.Find(id);
            db.UsuariosEquipos.Remove(usuarioequipo);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}